#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main(int argc, char **argv)
{

    // 打开视频文件
    cv::VideoCapture cap("/dev/video0");
    if (!cap.isOpened())
    {
        std::cout << "Error opening video file" << std::endl;
        return -1;
    }

    // 获取视频的宽度和高度
    int width = static_cast<int>(cap.get(cv::CAP_PROP_FRAME_WIDTH));
    int height = static_cast<int>(cap.get(cv::CAP_PROP_FRAME_HEIGHT));
    cout<<width<<" "<<height<<endl;
    // 循环读取每一帧
    while (true)
    {
        cv::Mat frame;
        cap >> frame; // 读取下一帧

        if (frame.empty())
            break;

        // 转换到HSV颜色空间
        cv::Mat hsv;
        cv::cvtColor(frame, hsv, cv::COLOR_BGR2HSV);

        // 定义红色范围
        cv::Scalar lower_red = {126, 126, 0};
        cv::Scalar upper_red = {179, 255, 255};
        // cv::Scalar lower_red2 = {170, 100, 100};
        // cv::Scalar upper_red2 = {180, 255, 255};

        // 创建掩模
        cv::Mat mask, mask2;
        cv::inRange(hsv, lower_red, upper_red, mask);
        //cv::inRange(hsv, lower_red2, upper_red2, mask2);

        // 合并两个掩模
        // cv::Mat mask;
        // cv::bitwise_or(mask1, mask2, mask);
        imshow("ImageMask", mask);
        cv::waitKey(1);
        // 计算红色像素数量
        int red_pixel_count = cv::countNonZero(mask);

        // 计算红色像素占比
        double ratio = static_cast<double>(red_pixel_count) / (width * height);

        std::cout << "Frame Red Pixel Ratio: " << ratio << std::endl;
    }

    // 关闭视频文件
    cap.release();

    return 0;
}